iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
Software Development

One Punch 一拳搞定前後端面試系列 第 14

[One Punch 一拳搞定前後端面試] DAY-14 - Stack

  • 分享至 

  • xImage
  •  

資料結構 : 堆疊 (Stack)

堆疊是一種常見的資料結構,其特性是先進後出,後進先出(Last In - First Out)。像堆東西那樣。

也就像搭電梯,先進去的人最後出來,最後進去的人最先出來。

此文同時發佈於好讀版

堆疊應該要有的方法

  1. 把資料加進去(疊上去)。
  2. 把最後進去的資料刪除(移除最後疊上去的資料)。
  3. 回傳最後進去的資料,不刪除。

JavaScript 解法

JS 可用陣列方法來達到這三種效果。

  1. push() : 把資料加進去。
  2. pop() : 把最後進去的資料刪除。
  3. peek() : 回傳最後進去的資料,不刪除。
class Stack {
  constructor() {
    this.data = [];
  }

  push(record) {
    this.data.push(record);
  }

  pop() {
    return this.data.pop();
  }

  peek() {
    return this.data[this.data.length - 1];
  }
}

說明:data.length - 1 : 陣列長度 -1 就是陣列中最後一個元素。

Java 解法

Java 本身就有 Stack 物件可以使用,Stack 物件有以下方法可以達到我們需求:

  1. push() : 把資料加進去最上層(疊上去),回傳該資料。
  2. pop() : 把最後進去的資料刪除。
  3. peek() : 回傳最後進去的資料,不刪除。
public class MyStack {

	// 加資料進去,return 其值
	private static String mypush(Stack st, String str) {
		System.out.println("mypush(" + str + ")");

		return (String) st.push(str);
	}

	// 回傳最後進去的,並刪除它
	private static void mypop(Stack st) {
		System.out.print("mypop -> ");
		String str = (String) st.pop();
		System.out.println(str);
	}

	// 回傳最後進去的值,不刪除
	private static void mypeek(Stack st) {
		System.out.print("mypeek -> ");
		String str = (String) st.peek();
		System.out.println(str);
	}

	public static void main(String[] args) {

		Stack st = new Stack();

		mypush(st, "1st persion");
		System.out.println(" push 1st persion 後 stack: " + st);
		System.out.println("===========================");

		mypush(st, "2nd persion");
		System.out.println(" push 2nd persion 後 stack: " + st);
		System.out.println("===========================");

		mypop(st);
		System.out.println(" mypop 後 stack: " + st);
		System.out.println("===========================");

		mypeek(st);
		System.out.println("peek 後 stack: " + st);
	}

}

Java 的 Stack 還有其他方法,詳情請見 Java官網 API 文件

此文同時發佈於好讀版


上一篇
[One Punch 一拳搞定前後端面試] DAY-13 - Queue
下一篇
[One Punch 一拳搞定前後端面試] DAY-15 - LinkedList
系列文
One Punch 一拳搞定前後端面試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言